package com.TCP_UDP网络编程.TCP_Socket_网络编程;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

@SuppressWarnings("all")
public class socketTCP02服务端_监听请求 {
    public static void main(String[] args) throws IOException {
        System.out.println("服务端正在9999端口监听中~~~~");
        /// 1.在本机的9999端口进行监听，等待连接
        ServerSocket serverSocket = new ServerSocket(9999);
        /// 2.等待客户连接通过accept得到一个客户对象，如果没有连接一直监听阻塞（类似Scanner）；
        ///   如果有用户连接9999端口，会被当前一行接收到，否则一直监听阻塞；
        Socket socket1 = serverSocket.accept();  
        /// 3.输出 连接的客户端socket1对象的运行类型和IP地址
        System.out.println("class = "+socket1.getClass() + "   IP = " + socket1.getInetAddress());
        /// 4.通过得到该对象的socket1.getInputStream();得到一个输入流，用来读取客户端发过来的内容；
        InputStream inputStream = socket1.getInputStream();
        /// 5.为了方便，弄成包装流；
        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
        ///6. 读取客户端发过来的内容
        String str = null;
        while((str = br.readLine()) != null)
            System.out.println(str);

        /// 7.读取完后回复  hello 客户端,用来给当前客户端发送信息的流；
        ///  发送完后一定要有该传输对象的结束标记  socket1.shutdownOutput();，不然对方一直等待输入，阻塞；
        OutputStream outputStream = socket1.getOutputStream();
        outputStream.write("hello 客户端~~".getBytes());
        socket1.shutdownOutput();  ///一定要关闭，否则阻塞；

        /// 8..关闭想用资源
        br.close();
        outputStream.close();
        serverSocket.close();
        socket1.close();

    }
}
